डेटा विश्लेषण के लिए पांडास GroupBy की शक्ति को अनलॉक करें। यह गाइड अंतरराष्ट्रीय डेटा के लिए व्यावहारिक उदाहरणों के साथ एग्रीगेशन और ट्रांसफॉर्मेशन तकनीकों की पड़ताल करता है।
पांडास GroupBy ऑपरेशन्स में महारत हासिल करना: एग्रीगेशन बनाम ट्रांसफॉर्मेशन
पांडास, जो पाइथन में डेटा मैनिपुलेशन का आधार है, डेटा का विश्लेषण और समझने के लिए एक शक्तिशाली टूल प्रदान करता है: GroupBy ऑपरेशन। यह सुविधा आपको साझा विशेषताओं के आधार पर अपने डेटा को समूहों में विभाजित करने और फिर इन समूहों पर फ़ंक्शन लागू करने की अनुमति देती है, जिससे ऐसी अंतर्दृष्टि प्रकट होती है जो अन्यथा छिपी रहती। यह लेख दो प्रमुख GroupBy ऑपरेशन्स: एग्रीगेशन और ट्रांसफॉर्मेशन की गहराई में जाता है, जो दुनिया भर के डेटा पेशेवरों के लिए उपयुक्त व्यावहारिक उदाहरण और स्पष्टीकरण प्रदान करता है।
GroupBy अवधारणा को समझना
मूल रूप से, GroupBy एक प्रक्रिया है जिसमें तीन मुख्य चरण शामिल हैं: एक या अधिक मानदंडों के आधार पर डेटा को समूहों में विभाजित करना (splitting), प्रत्येक समूह पर स्वतंत्र रूप से एक फ़ंक्शन लागू करना (applying), और परिणामों को एक नई डेटा संरचना में संयोजित करना (combining)। यह "स्प्लिट-अप्लाई-कंबाइन" रणनीति डेटा विश्लेषण में एक मौलिक अवधारणा है और जटिल डेटासेट की खोज के लिए एक लचीला ढांचा प्रदान करती है।
GroupBy की शक्ति विभिन्न डेटा प्रकारों और संरचनाओं को संभालने की क्षमता में निहित है, जो इसे विविध डोमेन में लागू करने योग्य बनाती है। चाहे आप कई क्षेत्रों के बिक्री डेटा का विश्लेषण कर रहे हों, विभिन्न उपकरणों से सेंसर रीडिंग, या जनसांख्यिकी में सोशल मीडिया गतिविधि का, GroupBy आपको सार्थक अंतर्दृष्टि निकालने में मदद कर सकता है।
एग्रीगेशन: समूहों के भीतर डेटा को सारांशित करना
एग्रीगेशन प्रत्येक समूह के लिए सारांश आँकड़ों की गणना करने की प्रक्रिया है। ये आँकड़े समूह की विशेषताओं का एक संक्षिप्त अवलोकन प्रदान करते हैं, जिससे आप अपने डेटा के विभिन्न खंडों की तुलना कर सकते हैं। सामान्य एग्रीगेशन फ़ंक्शंस में शामिल हैं:
sum(): प्रत्येक समूह के भीतर मानों का योगคำนวณ करता है।mean(): प्रत्येक समूह के भीतर औसत मान की गणना करता है।median(): प्रत्येक समूह के भीतर मध्य मान की गणना करता है।min(): प्रत्येक समूह के भीतर न्यूनतम मान पाता है।max(): प्रत्येक समूह के भीतर अधिकतम मान पाता है।count(): प्रत्येक समूह के भीतर गैर-शून्य मानों की संख्या गिनता है।size(): प्रत्येक समूह का आकार लौटाता है (शून्य सहित)।std(): प्रत्येक समूह के भीतर मानक विचलन की गणना करता है।var(): प्रत्येक समूह के भीतर प्रसरण की गणना करता है।
एग्रीगेशन के व्यावहारिक उदाहरण
आइए एक काल्पनिक ई-कॉमर्स कंपनी के लिए अंतरराष्ट्रीय बिक्री डेटा के डेटासेट पर विचार करें। डेटा में उत्पाद श्रेणी, बिक्री का देश और बिक्री की राशि के बारे में जानकारी शामिल है।
import pandas as pd
# Sample data
data = {
'Category': ['Electronics', 'Clothing', 'Electronics', 'Clothing', 'Home Goods', 'Electronics', 'Clothing', 'Home Goods'],
'Country': ['USA', 'UK', 'Canada', 'USA', 'Germany', 'UK', 'Canada', 'Germany'],
'Sales': [100, 50, 75, 60, 80, 90, 45, 70]
}
df = pd.DataFrame(data)
print(df)
यह आउटपुट देगा:
Category Country Sales
0 Electronics USA 100
1 Clothing UK 50
2 Electronics Canada 75
3 Clothing USA 60
4 Home Goods Germany 80
5 Electronics UK 90
6 Clothing Canada 45
7 Home Goods Germany 70
उदाहरण 1: प्रति श्रेणी कुल बिक्री की गणना
प्रत्येक उत्पाद श्रेणी के लिए कुल बिक्री की गणना करने के लिए, हम groupby() विधि का उपयोग कर सकते हैं, जिसके बाद sum() एग्रीगेशन फ़ंक्शन का उपयोग किया जाता है।
category_sales = df.groupby('Category')['Sales'].sum()
print(category_sales)
यह आउटपुट देगा:
Category
Clothing 155
Electronics 265
Home Goods 150
Name: Sales, dtype: int64
उदाहरण 2: प्रति देश औसत बिक्री की गणना
इसी तरह, प्रति देश औसत बिक्री की गणना करने के लिए, हम mean() एग्रीगेशन फ़ंक्शन का उपयोग कर सकते हैं।
country_sales = df.groupby('Country')['Sales'].mean()
print(country_sales)
यह आउटपुट देगा:
Country
Canada 60.0
Germany 75.0
UK 70.0
USA 80.0
Name: Sales, dtype: float64
उदाहरण 3: कई एग्रीगेशन फ़ंक्शंस का उपयोग करना
पांडास आपको agg() विधि का उपयोग करके एक साथ कई एग्रीगेशन फ़ंक्शंस लागू करने की अनुमति देता है। यह समूह की विशेषताओं का एक व्यापक सारांश प्रदान करता है।
category_summary = df.groupby('Category')['Sales'].agg(['sum', 'mean', 'median', 'count'])
print(category_summary)
यह आउटपुट देगा:
sum mean median count
Category
Clothing 155 51.666667 50.0 3
Electronics 265 88.333333 90.0 3
Home Goods 150 75.000000 75.0 2
उदाहरण 4: कस्टम एग्रीगेशन फ़ंक्शंस
आप लैम्ब्डा एक्सप्रेशंस या नामित फ़ंक्शंस का उपयोग करके अपने स्वयं के कस्टम एग्रीगेशन फ़ंक्शंस को भी परिभाषित कर सकते हैं। यह आपको विशिष्ट आँकड़ों की गणना करने की अनुमति देता है जो मानक एग्रीगेशन फ़ंक्शंस में उपलब्ध नहीं हैं।
# Custom function to calculate the range (max - min)
def custom_range(x):
return x.max() - x.min()
category_summary = df.groupby('Category')['Sales'].agg(['sum', 'mean', custom_range])
print(category_summary)
यह आउटपुट देगा:
sum mean custom_range
Category
Clothing 155 51.666667 15
Electronics 265 88.333333 25
Home Goods 150 75.000000 10
ट्रांसफॉर्मेशन: समूहों के भीतर डेटा को संशोधित करना
दूसरी ओर, ट्रांसफॉर्मेशन में किसी गणना के आधार पर प्रत्येक समूह के भीतर डेटा को संशोधित करना शामिल है। एग्रीगेशन के विपरीत, जो प्रत्येक समूह के लिए एक सारांशित मान लौटाता है, ट्रांसफॉर्मेशन मूल डेटा में प्रत्येक पंक्ति के लिए एक मान लौटाता है, लेकिन मान की गणना उस समूह के आधार पर की जाती है जिससे वह पंक्ति संबंधित है। ट्रांसफॉर्मेशन ऑपरेशन्स DataFrame के मूल सूचकांक और आकार को संरक्षित करते हैं।
ट्रांसफॉर्मेशन के सामान्य उपयोग मामलों में शामिल हैं:
- प्रत्येक समूह के भीतर डेटा का मानकीकरण करना।
- प्रत्येक समूह के भीतर रैंक या पर्सेंटाइल की गणना करना।
- समूह आँकड़ों के आधार पर लुप्त मानों को भरना।
ट्रांसफॉर्मेशन के व्यावहारिक उदाहरण
आइए हम अपने अंतरराष्ट्रीय बिक्री डेटा के साथ जारी रखें। हम प्रत्येक देश के भीतर बिक्री के आंकड़ों से संबंधित गणना करने के लिए ट्रांसफॉर्मेशन लागू कर सकते हैं।
उदाहरण 1: प्रत्येक देश के भीतर बिक्री डेटा का मानकीकरण (Z-स्कोर)
डेटा का मानकीकरण करने में मानों को 0 के माध्य और 1 के मानक विचलन के लिए बदलना शामिल है। यह विभिन्न पैमानों और वितरणों में डेटा की तुलना करने के लिए उपयोगी है। इसे प्राप्त करने के लिए हम transform() विधि के साथ एक लैम्ब्डा एक्सप्रेशन का उपयोग कर सकते हैं।
from scipy.stats import zscore
df['Sales_Zscore'] = df.groupby('Country')['Sales'].transform(zscore)
print(df)
यह आउटपुट देगा:
Category Country Sales Sales_Zscore
0 Electronics USA 100 1.000000
1 Clothing UK 50 -1.000000
2 Electronics Canada 75 1.000000
3 Clothing USA 60 -1.000000
4 Home Goods Germany 80 1.000000
5 Electronics UK 90 1.000000
6 Clothing Canada 45 -1.000000
7 Home Goods Germany 70 -1.000000
Sales_Zscore कॉलम में अब प्रत्येक देश के लिए मानकीकृत बिक्री मान हैं। 0 से ऊपर के मान उस देश के लिए औसत बिक्री से ऊपर हैं, और 0 से नीचे के मान औसत से नीचे हैं।
उदाहरण 2: प्रत्येक श्रेणी के भीतर बिक्री रैंक की गणना
प्रत्येक बिक्री की उसकी श्रेणी के भीतर रैंक की गणना करने के लिए, हम transform() फ़ंक्शन के भीतर rank() विधि का उपयोग कर सकते हैं।
df['Sales_Rank'] = df.groupby('Category')['Sales'].transform(lambda x: x.rank(method='dense'))
print(df)
यह आउटपुट देगा:
Category Country Sales Sales_Zscore Sales_Rank
0 Electronics USA 100 1.000000 3.0
1 Clothing UK 50 -1.000000 2.0
2 Electronics Canada 75 1.000000 1.0
3 Clothing USA 60 -1.000000 3.0
4 Home Goods Germany 80 1.000000 2.0
5 Electronics UK 90 1.000000 2.0
6 Clothing Canada 45 -1.000000 1.0
7 Home Goods Germany 70 -1.000000 1.0
Sales_Rank कॉलम प्रत्येक बिक्री की उसकी संबंधित श्रेणी के भीतर रैंक को इंगित करता है। `method='dense'` तर्क यह सुनिश्चित करता है कि लगातार रैंक बिना किसी अंतराल के असाइन किए जाएं।
उदाहरण 3: समूह माध्य के आधार पर लुप्त मानों को भरना
आइए बिक्री डेटा में कुछ लुप्त मानों को डालें और फिर उन्हें प्रत्येक देश के लिए औसत बिक्री के आधार पर भरें।
import numpy as np
# Introduce missing values
df.loc[[0, 3], 'Sales'] = np.nan
print(df)
# Fill missing values based on country mean
df['Sales_Filled'] = df['Sales'].fillna(df.groupby('Country')['Sales'].transform('mean'))
print(df)
लुप्त मानों वाला प्रारंभिक DataFrame इस तरह दिखेगा:
Category Country Sales Sales_Zscore Sales_Rank
0 Electronics USA NaN 1.000000 3.0
1 Clothing UK 50 -1.000000 2.0
2 Electronics Canada 75 1.000000 1.0
3 Clothing USA NaN -1.000000 3.0
4 Home Goods Germany 80 1.000000 2.0
5 Electronics UK 90 1.000000 2.0
6 Clothing Canada 45 -1.000000 1.0
7 Home Goods Germany 70 -1.000000 1.0
और लुप्त मानों को भरने के बाद:
Category Country Sales Sales_Zscore Sales_Rank Sales_Filled
0 Electronics USA NaN 1.000000 3.0 NaN
1 Clothing UK 50 -1.000000 2.0 50.0
2 Electronics Canada 75 1.000000 1.0 75.0
3 Clothing USA NaN -1.000000 3.0 NaN
4 Home Goods Germany 80 1.000000 2.0 80.0
5 Electronics UK 90 1.000000 2.0 90.0
6 Clothing Canada 45 -1.000000 1.0 45.0
7 Home Goods Germany 70 -1.000000 1.0 70.0
महत्वपूर्ण नोट: क्योंकि `USA` के लिए कोई मौजूदा माध्य नहीं था, इसलिए `Sales_Filled` में परिणामी मान `NaN` हैं। विश्वसनीय डेटा विश्लेषण के लिए इस तरह के एज केस को संभालना महत्वपूर्ण है और इसे कार्यान्वयन के दौरान ध्यान में रखा जाना चाहिए।
एग्रीगेशन बनाम ट्रांसफॉर्मेशन: मुख्य अंतर
जबकि एग्रीगेशन और ट्रांसफॉर्मेशन दोनों शक्तिशाली GroupBy ऑपरेशन्स हैं, वे अलग-अलग उद्देश्यों की पूर्ति करते हैं और उनकी विशिष्ट विशेषताएं हैं:
- आउटपुट आकार: एग्रीगेशन डेटा के आकार को कम करता है, प्रत्येक समूह के लिए एक एकल मान लौटाता है। ट्रांसफॉर्मेशन मूल डेटा आकार को संरक्षित करता है, प्रत्येक पंक्ति के लिए एक परिवर्तित मान लौटाता है।
- उद्देश्य: एग्रीगेशन का उपयोग डेटा को सारांशित करने और समूह की विशेषताओं में अंतर्दृष्टि प्राप्त करने के लिए किया जाता है। ट्रांसफॉर्मेशन का उपयोग समूहों के भीतर डेटा को संशोधित करने के लिए किया जाता है, अक्सर मानकीकरण या सामान्यीकरण के लिए।
- वापसी मान: एग्रीगेशन एक नया DataFrame या Series लौटाता है जिसमें एकत्रित मान होते हैं। ट्रांसफॉर्मेशन एक Series लौटाता है जिसमें परिवर्तित मान होते हैं, जिसे बाद में मूल DataFrame में एक नए कॉलम के रूप में जोड़ा जा सकता है।
एग्रीगेशन और ट्रांसफॉर्मेशन के बीच चयन आपके विशिष्ट विश्लेषणात्मक लक्ष्यों पर निर्भर करता है। यदि आपको डेटा को सारांशित करने और समूहों की तुलना करने की आवश्यकता है, तो एग्रीगेशन उपयुक्त विकल्प है। यदि आपको मूल डेटा संरचना को संरक्षित करते हुए समूहों के भीतर डेटा को संशोधित करने की आवश्यकता है, तो ट्रांसफॉर्मेशन बेहतर विकल्प है।
उन्नत GroupBy तकनीकें
बुनियादी एग्रीगेशन और ट्रांसफॉर्मेशन से परे, पांडास GroupBy अधिक परिष्कृत डेटा विश्लेषण के लिए कई उन्नत तकनीकें प्रदान करता है।
apply() के साथ कस्टम फ़ंक्शंस लागू करना
apply() विधि सबसे अधिक लचीलापन प्रदान करती है, जिससे आप प्रत्येक समूह में कोई भी कस्टम फ़ंक्शन लागू कर सकते हैं। यह फ़ंक्शन कोई भी ऑपरेशन कर सकता है, जिसमें एग्रीगेशन, ट्रांसफॉर्मेशन, या और भी जटिल गणनाएं शामिल हैं।
def custom_function(group):
# Calculate the sum of sales for each category in a group, only if there is more than one row in the group
if len(group) > 1:
group['Sales_Sum'] = group['Sales'].sum()
else:
group['Sales_Sum'] = 0 # Or some other default value
return group
df_applied = df.groupby('Country').apply(custom_function)
print(df_applied)
इस उदाहरण में, हम एक कस्टम फ़ंक्शन को परिभाषित करते हैं जो प्रत्येक समूह (देश) के भीतर बिक्री के योग की गणना करता है। apply() विधि इस फ़ंक्शन को प्रत्येक समूह पर लागू करती है, जिसके परिणामस्वरूप एक नया कॉलम होता है जिसमें उस समूह के लिए बिक्री का योग होता है।
महत्वपूर्ण नोट: apply फ़ंक्शन अन्य विधियों की तुलना में अधिक कम्प्यूटेशनल रूप से गहन हो सकता है। बड़े डेटासेट के साथ काम करते समय अपने कोड को अनुकूलित करें और वैकल्पिक कार्यान्वयन पर विचार करें।
कई कॉलम द्वारा समूहीकरण
आप अधिक विस्तृत खंड बनाने के लिए अपने डेटा को कई कॉलमों द्वारा समूहित कर सकते हैं। यह आपको कई विशेषताओं के प्रतिच्छेदन के आधार पर डेटा का विश्लेषण करने की अनुमति देता है।
category_country_sales = df.groupby(['Category', 'Country'])['Sales'].sum()
print(category_country_sales)
यह डेटा को Category और Country दोनों द्वारा समूहित करेगा, जिससे आप प्रत्येक देश के भीतर प्रत्येक श्रेणी के लिए कुल बिक्री की गणना कर सकते हैं। यह विभिन्न क्षेत्रों और उत्पाद लाइनों में बिक्री प्रदर्शन का अधिक विस्तृत दृश्य प्रदान करता है।
समूहों के माध्यम से इटरेट करना
अधिक जटिल विश्लेषण के लिए, आप for लूप का उपयोग करके समूहों के माध्यम से इटरेट कर सकते हैं। यह आपको प्रत्येक समूह को व्यक्तिगत रूप से एक्सेस करने और उस पर कस्टम ऑपरेशन करने की अनुमति देता है।
for name, group in df.groupby('Category'):
print(f"Category: {name}")
print(group)
यह प्रत्येक उत्पाद श्रेणी के माध्यम से इटरेट करेगा और संबंधित डेटा प्रिंट करेगा। यह प्रत्येक श्रेणी के लिए कस्टम विश्लेषण करने या रिपोर्ट तैयार करने के लिए उपयोगी हो सकता है।
GroupBy का उपयोग करने के लिए सर्वोत्तम अभ्यास
GroupBy के कुशल और प्रभावी उपयोग को सुनिश्चित करने के लिए, निम्नलिखित सर्वोत्तम प्रथाओं पर विचार करें:
- अपने डेटा को समझें:
GroupByलागू करने से पहले, अपने डेटा को समझने और प्रासंगिक समूहीकरण मानदंडों और एग्रीगेशन/ट्रांसफॉर्मेशन फ़ंक्शंस की पहचान करने के लिए समय निकालें। - सही ऑपरेशन चुनें: ध्यान से विचार करें कि आपके विश्लेषणात्मक लक्ष्यों के लिए एग्रीगेशन या ट्रांसफॉर्मेशन उपयुक्त विकल्प है या नहीं।
- प्रदर्शन के लिए अनुकूलन करें: बड़े डेटासेट के लिए, वेक्टरकृत संचालन का उपयोग करके और अनावश्यक लूप से बचकर अपने कोड को अनुकूलित करने पर विचार करें।
- लुप्त मानों को संभालें: अपने डेटा में लुप्त मानों से अवगत रहें और उन्हें
fillna()याdropna()जैसी विधियों का उपयोग करके उचित रूप से संभालें। - अपने कोड का दस्तावेजीकरण करें: प्रत्येक
GroupByऑपरेशन के उद्देश्य और अपनी पसंद के पीछे के तर्क को समझाने के लिए अपने कोड का स्पष्ट रूप से दस्तावेजीकरण करें।
निष्कर्ष
पांडास GroupBy डेटा विश्लेषण के लिए एक शक्तिशाली उपकरण है, जो आपको अपने डेटा को विभाजित करने, प्रत्येक समूह में फ़ंक्शन लागू करने और मूल्यवान अंतर्दृष्टि निकालने में सक्षम बनाता है। एग्रीगेशन और ट्रांसफॉर्मेशन तकनीकों में महारत हासिल करके, आप अपने डेटा की पूरी क्षमता को अनलॉक कर सकते हैं और अंतर्निहित पैटर्न और रुझानों की गहरी समझ प्राप्त कर सकते हैं। चाहे आप बिक्री डेटा, सेंसर रीडिंग, या सोशल मीडिया गतिविधि का विश्लेषण कर रहे हों, GroupBy आपको डेटा-संचालित निर्णय लेने और अपने विश्लेषणात्मक लक्ष्यों को प्राप्त करने में मदद कर सकता है। GroupBy की शक्ति को अपनाएं और अपने डेटा विश्लेषण कौशल को अगले स्तर तक ले जाएं।
इस गाइड ने एग्रीगेशन बनाम ट्रांसफॉर्मेशन पर ध्यान केंद्रित करते हुए पांडास GroupBy ऑपरेशन्स का एक व्यापक अवलोकन प्रदान किया है। इन तकनीकों का उपयोग करके, दुनिया भर के डेटा वैज्ञानिक विविध डेटासेट में महत्वपूर्ण व्यावसायिक अंतर्दृष्टि निकालने में सक्षम हैं। पांडास की पूरी क्षमता का लाभ उठाने के लिए अभ्यास करें, प्रयोग करें और इन तकनीकों को अपनी विशिष्ट आवश्यकताओं के अनुसार ढालें।